package com.member.shop.domain;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.member.common.annotation.Excel;
import com.member.common.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 订单对象 sys_biz_order
 *
 * @author lixinchen
 * @date 2024-01-08
 */
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@TableName("sys_biz_order")
public class SysBizOrder extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 唯一id
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * tenantId
     */
    private Long tenantId;

    /**
     * 订单code
     */
    @Excel(name = "订单code")
    private String orderCode;

    /**
     * 订单状态
     * 待支付：10、已支付：15、待发货：20、已发货：30、已完成：40、已取消：90、售后中: 80、售后成功：85、售后失败：88
     */
    @Excel(name = "订单状态 待支付：10、已支付：15、待发货：20、已发货：30、已完成：40、已取消：90、售后中: 80、售后成功：85、售后失败：88")
    private Integer status;

    /**
     * 商品id
     */
    @Excel(name = "商品id")
    private Long goodsId;

    /**
     * 下单人id
     */
    @Excel(name = "下单人id")
    private Long userId;


    /**
     * 归属经销商id
     */
    @Excel(name = "归属经销商id")
    private Long belongDealerId;


    /**
     * 订单类型（0：普通类型，1：积分订单）
     */
    @Excel(name = "订单类型")
    private Integer orderType;

    /**
     * 归属店铺id
     */
    @Excel(name = "归属店铺id")
    private Long belongShopId;
    /**
     * 商品名称
     */
    @Excel(name = "商品名称")
    private String goodsName;

    /**
     * 下单人
     */
    @Excel(name = "下单人")
    private String userName;

    /**
     * 下单人手机号
     */
    @Excel(name = "下单人手机号")
    private String phone;

    /**
     * 订单金额
     */
    @Excel(name = "订单金额")
    private BigDecimal amount;

    /**
     * 应付金额
     */
    @Excel(name = "应付金额")
    private BigDecimal payableAmount;

    /**
     * 实付金额
     */
    @Excel(name = "实付金额")
    private BigDecimal actualPaymentAmount;

    /**
     * 总计
     */
    @Excel(name = "总计")
    private BigDecimal totalPrice;

    /**
     * 支付状态(0:未支付，1:已支付)
     */
    @Excel(name = "支付状态(0:未支付，1:已支付)")
    private Integer paymentStatus;

    /**
     * 支付流水号
     */
    @Excel(name = "支付流水号")
    private String paymentNo;

    /**
     * 富有支付金额
     */
    @Excel(name = "富有支付金额")
    private BigDecimal fuyouDiscountAmount;

    /**
     * 分账金支付金额
     */
    @Excel(name = "分账金支付金额")
    private BigDecimal balanceDiscountAmount;

    /**
     * 余额支付金额
     */
    @Excel(name = "余额支付金额")
    private BigDecimal surplusAmount;

    /**
     * 支付方式 (0 微信 1 支付宝  2 余额)
     */
    @Excel(name = "支付方式(0 微信 1 支付宝  2 余额)")
    private Integer paymentType;

    /**
     * 支付时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date paymentTime;

    /**
     * 支付截止时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "支付截止时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date paymentTimeEnd;

    /**
     * 地址id
     */
    @Excel(name = "地址id")
    private Long addressId;

    /**
     * 收货人
     */
    @Excel(name = "收货人")
    private String receiver;

    /**
     * 联系电话
     */
    @Excel(name = "联系电话")
    private String contactNumber;

    /**
     * 收货地址
     */
    @Excel(name = "收货地址")
    private String receiverAddress;

    @TableField(exist = false)
    private String address;

    /**
     * 下单时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "下单时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date orderAddTime;

    /**
     * 发货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "发货时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date deliveryGoodsTime;

    /**
     * 收货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "收货时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date receiverGoodsTime;

    /**
     * 取消时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "取消时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date cancelTime;

    /**
     * 快递公司
     */
    @Excel(name = "快递公司")
    @TableField(fill = FieldFill.UPDATE)
    private String expressCompany;

    /**
     * 快递单号
     */
    @Excel(name = "快递单号")
    @TableField(fill = FieldFill.UPDATE)
    private String expressNo;

    /**
     * 核销码
     */
    @Excel(name = "核销码")
    private String writeOffCode;
    /**
     * 核销状态 （0 待核销 1 已核销 2 不核销）
     */
    @Excel(name = "核销状态", readConverterExp = "（0 待核销 1 已核销 2 不核销）")
    private String writeOffStatus;
    /**
     * 是否删除 0  否 1是
     */
    @Excel(name = "是否删除 0  否 1是")
    private Integer delStatus;

    /**
     * 取消原因
     */
    @Excel(name = "取消原因")
    private String cancelReason;

    /**
     * 省
     */
    @Excel(name = "省")
    private String province;

    /**
     * 市
     */
    @Excel(name = "市")
    private String city;

    /**
     * 区
     */
    @Excel(name = "区")
    private String area;

    /**
     * 是否可以售后：0可以；1(默认无售后)
     */
    @Excel(name = "是否可以售后：0可以；1(默认无售后)")
    private Integer isRepair;

    /**
     * 富友流水号
     */
    private String paymentId;


    /**
     * 备注
     */
    @Excel(name = "备注")
    private String remark;

    @TableField(exist = false)
    List<SysBizOrderGoods> sysBizOrderGoodsList;

    @TableField(exist = false)
    private String avatar;

    @TableField(exist = false)
    private String payType;

    // 截单时间
    @TableField(exist = false)
    private String orderLimitTime;

    private Long userCouponId;

    private String couponName;

    private BigDecimal couponPrice;

    /**
     * 微信流水号
     */
    private String transactionId;

    /**
     * 富友openId
     */
    private String fyOpenId;


    /**
     * 街道
     */
    private String street;

    /**
     * 纬度
     */
    private String lat;

    /**
     * 经度
     */
    private String lng;

    /**
     * 门牌号
     */
    private String houseNum;


    /*订单推送次数（自动三次失败不推送）*/
    private Long pushNum;

}
